Many data storage systems employ some type of coding system in which data being stored is combined, or encoded, with error checking information to form a codeword that meets a priori established constraints. Codewords retrieved from memory are checked against the constraints. If the codeword does not meet the constraints, iterative techniques may be used to attempt to correct the codeword. Typically, if after a certain number of iterations a valid codeword has not been recovered, the decoding process is stopped and a decoding failure is declared.